iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
IT 管理

Playwright + Test Design + AI Agent:自動化測試實戰系列 第 2

第 02 天:打狗棒法招式靈活多變,變化萬千

  • 分享至 

  • xImage
  •  

如果要讓大家都能學得到的天下絕頂的武功,我第一個想到的就是丐幫的「打狗棒法」。這套功夫,招式跟心法是分開的,招式大部分幫眾都能學,但打狗棒法心法只傳幫主。不過寫測試案例就不一樣了。Gherkin 使用的關鍵字就像是打狗棒法的招式,連非技術出身的同事都能輕鬆了解,只要使用得當,就能夠與非技術人員一起討論需求,而不會有技術上的誤差。

內功心法:Gherkin 關鍵字

Gherkin 是一種結構化的自然語言,常搭配工具如 Cucumber、SpecFlow、Behave 使用。在 Playwright 中,我們會安裝 Playwright Cucumber 讓 Playwright 支援 Gherkin 的語法。打狗棒法是透過不同招式組合而成,在 Gherkin 語法裡,描述情境的核心,就是幾個簡單的關鍵字。就像打狗棒法的招式一句一句串起來,便成了完整的功夫。接著,我們先介紹每個常用的關鍵字:

Given (前置條件)
Given 用來設定測試開始前的初始狀態或環境。它描述了測試執行的必要條件,例如:使用者登入、資料庫中存在特定測試資料,或是應用程式位於某個特定頁面。Given 確保在執行測試行為(When)之前,系統已經準備好。

When (行為)
When 定義了使用者所執行的單一動作或行為。這個動作會導致應用程式的狀態發生變化。When 聚焦於測試的核心行為,例如:點擊按鈕、輸入文字或送出表單。

Then (驗證)
Then 用來驗證行為發生後所產生的結果。它描述了預期的應用程式狀態,例如:頁面是否跳轉、訊息是否顯示,或資料庫中的欄位是否正確更新。Then 驗證測試行為是否成功地產生了預期的結果。

And 與 But (串接條件或動作)
And 與 But 這兩個關鍵字可以用來連接多個 Given、When 或 Then 語句,使測試腳本更流暢且易於閱讀。

  • And:用來追加額外的條件或動作。它表示一個與前一個語句同類型的同等關係。
  • But:用來描述一個反向或例外的條件。它通常用於表達某個預期外的狀態。

使用這些關鍵字可以撰寫測試案例情境,用類似自然語言撰寫測試腳本和閱讀都變得非常直覺,對於非測試人員與開發人員間能夠進行有效的溝通。

招式演練:第一個測試情境

第一天寫的測試案例,如果使用 Gherkin 語法則會變成下列的格式(.feature),每個由關鍵字Given、When、Then、And、But)開頭的描述,我們稱為步驟(Step),而每個步驟都會對應到也就是實際執行的程式碼(Step definition)。

 features/login.feature

Feature: Playwright Home Page

Scenario: Check title
    Given I am on Playwright home page
    When I click link "Get started"
    Then I see in title "Installation"

step-definitions/login.steps.ts

import { test } from 'playwright-bdd';

test.describe('Playwright Home Page', () => {
  test('Check title', async ({ Given, When, Then }) => {
    await Given('I am on Playwright home page');
    await When('I click link "Get started"');
    await Then('I see in title "Installation"');
  });
});
Given('I am on Playwright home page', async ({ page }) => {
  await page.goto('https://playwright.dev');
});

When('I click link {string}', async ({ page }, name) => {
  await page.getByRole('link', { name }).click();
});

Then('I see in title {string}', async ({ page }, text) => {
  await expect(page).toHaveTitle(new RegExp(text));
});

秘笈傳授:Given/When/Then 架構

在撰寫測試情境,我們通常採用的是 Given/When/Then 架構,這個架構跟 AAA 架構很類似,一樣有 Given(前置條件)、When(行為)、Then(驗證結果)來組成。這樣的架構讓測試案例既容易閱讀,又能自然對應到自動化程式碼。

Prompt 模板:請 AI 幫忙產生情境

請使用 Gherkin 語法撰寫測試情境,專案結構是
`ts
.
├─ .github/
│  ├─ chatmodes
│  │  └─ playwright-writer.chatmode.md
│  └─ prompts
│     └─ playwright-generate-test.prompt.md
├─ tests/                    # 你自己撰寫 test case
│  └─ e2e/login.spec.ts
├─ test-modules/             # Copilot 輸出的模組檔案放這裡
│  ├─ auth/
│  │  ├─ auth.module.ts      ← Copilot 幫忙產生
│  │  └─ auth.types.ts       ← Copilot 幫忙產生型別
│  ├─ cart/
│  └─ utils/
├─ fixtures/                 # 共用 fixture
│  └─ app.fixtures.ts
├─ data/                     # 測試資料與 factory
│  └─ users.factory.ts
└─ playwright.config.ts
`

最佳實踐

1. 使用 AAA 撰寫自動化測試案例
2. 使用 Given/When/Then 描述測試情境

收功:今日總結

  1. 今天我們實際演練第一個用 Gherkin 轉寫出來的測試情境。
  2. 使用自然語言的描述,能夠更容易與非技術人員溝通。
  3. 通常剛入門的弟子會過分強調 Gherkin 撰寫出來的例子,但真正的心法是善用這樣的工具去溝通,讓大家對齊需求模糊的地帶。

上一篇
第 01 天:天下武功,無堅不破,唯快不破
下一篇
第 03 天:他強由他強,清風拂山崗;他橫任他橫,明月照大江。
系列文
Playwright + Test Design + AI Agent:自動化測試實戰5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言